/**
 * <h3>AdvertisementServiceImpl</h3>
 * <p> 广告服务实现类 </p>
 *
 * <h3>功能描述</h3>
 * <p> 实现了 {@link IAdvertisementService} 接口中定义的广告信息增删改查业务逻辑 </p>
 * <p> 通过调用 {@link AdvertisementMapper} 完成对数据库的操作，支持条件查询、按ID查询、更新、新增和删除等操作 </p>
 *
 * <h3>元数据</h3>
 * <ul>
 *    <li> 作者：郭强</li>
 *    <li> 创建日期：2025年05月22日 21:20:00</li>
 * </ul>
 *
 * <h3>其他信息</h3>
 * <ul>
 *    <li> 参考链接：<a href="https://example.com">官方网页</a></li>
 *    <li> 示例代码：{@code new AdvertisementServiceImpl()} </li>
 * </ul>
 *
 * @apiNote 该类基于 MyBatis Plus 的 ServiceImpl 实现，需确保 AdvertisementMapper 正确注入
 * @implSpec 继承自 {@link ServiceImpl<AdvertisementMapper, Advertisement>} 并实现 {@link IAdvertisementService} 接口
 * @since 1.0.0
 */

package com.dnndo.system.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dnndo.system.domain.Advertisement;
import com.dnndo.system.domain.dto.AdvertisementDTO;
import com.dnndo.system.mapper.AdvertisementMapper;
import com.dnndo.system.service.IAdvertisementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 广告服务实现类
 */
@Service
public class AdvertisementServiceImpl extends ServiceImpl<AdvertisementMapper, AdvertisementDTO> implements IAdvertisementService {

    private final AdvertisementMapper advertisementMapper;


    @Autowired
    public AdvertisementServiceImpl(AdvertisementMapper advertisementMapper) {
        this.advertisementMapper = advertisementMapper;
    }

    /**
     * 查询符合条件的广告信息列表
     *
     * @param advertisementDTO 封装查询条件的 Advertisement 对象，包含广告名称、类型、省份等过滤字段
     * @return List<AdvertisementDTO> 匹配条件的广告信息列表
     * @see AdvertisementMapper#selectAdvertisementList(AdvertisementDTO)
     */
    @Override
    public List<Advertisement> selectAdvertisementList(AdvertisementDTO advertisementDTO) {
        return advertisementMapper.selectAdvertisementList(advertisementDTO);
    }

    /**
     * 根据广告唯一标识查询广告详细信息
     *
     * @param advertisementId 广告ID，用于定位数据库中的唯一记录
     * @return Advertisement 广告实体对象，若未找到则返回 null
     * @see AdvertisementMapper#selectAdvertisementListById(Long)
     */
    @Override
    public AdvertisementDTO selectAdvertisementListById(Long advertisementId) {
        return advertisementMapper.selectAdvertisementListById(advertisementId);
    }

    /**
     * 更新指定ID的广告信息
     *
     * @param advertisementDTO 封装更新数据的 Advertisement 对象，必须包含有效的 advertisementId 字段
     * @return int 受影响的记录数，通常为 1 表示更新成功
     * @see AdvertisementMapper#updateAdvertisementById(AdvertisementDTO)
     */
    @Override
    public int updateAdvertisementById(AdvertisementDTO advertisementDTO) {
        return advertisementMapper.updateAdvertisementById(advertisementDTO);
    }

    /**
     * 新增一条广告记录到数据库
     *
     * @param advertisementDTO 封装新增数据的 Advertisement 对象，需确保字段完整性
     * @return int 受影响的记录数，通常为 1 表示插入成功
     * @see AdvertisementMapper#insertAdvertisement(AdvertisementDTO)
     */
    @Override
    public int insertAdvertisement(AdvertisementDTO advertisementDTO) {
        return advertisementMapper.insertAdvertisement(advertisementDTO);
    }

    /**
     * 根据广告ID删除对应的记录
     *
     * @param advertisementId 广告唯一标识符
     * @return int 受影响的记录数，通常为 1 表示删除成功
     * @see AdvertisementMapper#deleteAdvertisementById(Integer)
     */
    @Override
    public int deleteAdvertisementById(Integer advertisementId) {
        return advertisementMapper.deleteAdvertisementById(advertisementId);
    }
}
